#!/bin/bash

# ===== 用户配置 =====
TARGET_DIR="/Users/dusen/Editor/temp"  # 要处理的根目录
REPLACE_CHAR=""                              # 非法字符替换为（空字符串表示删除）
DRY_RUN=false                                  # true=仅预览，false=实际修改

# 定义非法字符（系统+自定义）
ILLEGAL_CHARS='\/:*?"<>|!@#$%^&+=[]{};'\''`,'  # 基础非法字符
CUSTOM_ILLEGAL='👍🔥()'                          # 添加你的自定义字符（如表情符号）

# ===== 主程序 =====
echo "🔍 正在扫描路径: $TARGET_DIR"
echo "----------------------------------------"

# 合并所有非法字符（处理空格需特殊注意）
ALL_ILLEGAL=$(echo "$ILLEGAL_CHARS $CUSTOM_ILLEGAL" | tr -d '\n')

# 从深到浅处理目录（保证路径连续性）
find "$TARGET_DIR" -depth -print0 | while IFS= read -r -d '' path; do
    dirname=$(dirname "$path")
    basename=$(basename "$path")

    # 处理目录/文件名中的非法字符
    if [[ -z "$REPLACE_CHAR" ]]; then
        new_basename=$(echo "$basename" | tr -d "$ALL_ILLEGAL ")
    else
        new_basename=$(echo "$basename" | tr "$ALL_ILLEGAL " "$REPLACE_CHAR")
    fi

    # 如果名称被修改过
    if [[ "$basename" != "$new_basename" ]]; then
        new_path="$dirname/$new_basename"
        echo "原路径: $path"
        echo "新路径: $new_path"

        # 实际执行修改（当DRY_RUN=false时）
        if [[ "$DRY_RUN" == false ]]; then
            mv -- "$path" "$new_path"
            echo "✅ 已修改"
        fi
        echo "----------------------------------------"
    fi
done

if [[ "$DRY_RUN" == true ]]; then
    echo "⚠️ 注意：当前为模拟模式（DRY_RUN=true）"
    echo "若要实际修改路径，请将 DRY_RUN 设为 false"
fi
